Taxonomy Ranks:

Richness

1. Class

2. Order

3. Family

4. Genus

LS0tDQp0aXRsZTogIk5yZjIgQkw2IFBFSVRDIDE2UyBNaWNyb2Jpb21lIERhdGEgVmlzdWFsaXphdGlvbiINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdA0KICBodG1sX2RvY3VtZW50Og0KICAgIGRmX3ByaW50OiBwYWdlZA0KICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQNCi0tLQ0KDQoNCmBgYHtyIERhdGEsIHdhcm5pbmc9RkFMU0UsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFfQ0KcmVxdWlyZShkYXRhLnRhYmxlKQ0KcmVxdWlyZShwaHlsb3NlcSkNCnJlcXVpcmUoZ2dwbG90MikNCnJlcXVpcmUocGxvdGx5KQ0KDQojIExvYWQgZGF0YS0tLS0NCiMgQ291bnRzDQpsb2FkKCJkYXRhL3BzLlJEYXRhIikNCg0KIyBUYXhvbm9teQ0KbG9hZCgiZGF0YS90YXhhLnBsdXMuUkRhdGEiKQ0KdGF4YSA8LSBkYXRhLnRhYmxlKHNlcTE2cyA9IHJvd25hbWVzKHRheGEucGx1cyksDQogICAgICAgICAgICAgICAgICAgdGF4YS5wbHVzKQ0KDQojIFNhbXBsZXMNCiMgcHNAc2FtX2RhdGENCmxvYWQoImRhdGEvc2FtcGxlcy5SRGF0YSIpDQpzYW1wbGVzJFNhbXBsZSA8LSBzdWJzdHIoeCA9IHNhbXBsZXMkTmFtZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgc3RvcCA9IDUpDQpzYW1wbGVzJFNhbXBsZVtzYW1wbGVzJFNhbXBsZSAlaW4lIGMoIjRBX1MxIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNEJfUzIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0Q19TMyIpXSA8LSANCiAgc3Vic3RyKHggPSBzYW1wbGVzJFNhbXBsZVtzYW1wbGVzJFNhbXBsZSAlaW4lIGMoIjRBX1MxIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjRCX1MyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjRDX1MzIildLA0KICAgICAgICAgc3RhcnQgPSAxLA0KICAgICAgICAgc3RvcCA9IDIpDQpzYW1wbGVzDQpgYGANCg0KIyMjIFRheG9ub215IFJhbmtzOg0KKiBLaW5nZG9tICAgICAgICAgICAgICAgIA0KKiBQaHlsdW0gICAgICAgICAgICAgICAgICAgIA0KKiBDbGFzcyAgICAgICAgICAgICAgICAgICANCiogT3JkZXIgICAgICAgICAgICAgICAgICAgDQoqIEZhbWlseSAgICAgDQoqIEdlbnVzICAgICANCiogU3BlY2llcyAgDQoNCiMjIyBSaWNobmVzcw0KYGBge3IgUmljaG5lc3MsIHdhcm5pbmc9RkFMU0UsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFfQ0KIyBQYXJ0IEk6IGtlZXAgY29udHJvbHMgYW5kIFBFSVRDcyBhdCB3ZWVrcyA1IGFuZCA5IG9ubHkNCiMgdzU5IDwtIHBydW5lX3NhbXBsZXMoc2FtcGxlcyA9IHNhbXBsZV9uYW1lcyhwcylbIShzYW1wbGVfbmFtZXMocHMpICVpbiUNCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIjRBIiwNCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjRCIiwNCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjRDIiwNCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuZGV0ZXJtaW5lZCIpKV0sIA0KIyAgICAgICAgICAgICAgICAgICAgIHggPSBwcykNCnc1OSA8LSBwcnVuZV9zYW1wbGVzKHNhbXBsZXMgPSBzYW1wbGVfbmFtZXMocHMpW3NhbXBsZV9uYW1lcyhwcykgIT0gIlVuZGV0ZXJtaW5lZCJdLCANCiAgICAgICAgICAgICAgICAgICAgeCA9IHBzKQ0KDQpwMSA8LSBwbG90X3JpY2huZXNzKHc1OSwNCiAgICAgICAgICAgICAgeCA9ICJEaWV0X1dlZWsiLCANCiAgICAgICAgICAgICAgbWVhc3VyZXMgPSAiU2hhbm5vbiIsDQogICAgICAgICAgICAgIGNvbG9yID0gIldlZWsiKSArDQogIGdlb21fbGluZShhZXMoZ3JvdXAgPSBJRCksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsNCiAgZ2VvbV9wb2ludChzaGFwZSA9IDIxLA0KICAgICAgICAgICAgIHNpemUgPSAzLA0KICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikNCnAxDQpgYGANCg0KYGBge3IgVGF4LCB3YXJuaW5nPUZBTFNFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRX0NCiMgT1RVIHRhYmxlDQpvdHUgPC0gdCh3NTlAb3R1X3RhYmxlQC5EYXRhKQ0Kb3R1IDwtIGRhdGEudGFibGUoc2VxMTZzID0gcm93bmFtZXMob3R1KSwNCiAgICAgICAgICAgICAgICAgIG90dSkNCg0KIyBNZXJnZSB0YXhvbm9teSBhbmQgY291bnRzIHRhYmxlcy0tLS0NCmR0MSA8LSBtZXJnZSh0YXhhLA0KICAgICAgICAgICAgIG90dSwNCiAgICAgICAgICAgICBieSA9ICJzZXExNnMiKQ0KZHQxJHNlcTE2cyA8LSBOVUxMDQoNCiMgUmVtb3ZlIGFyY2hlYSBhbmQgZXVjYXJ5b3RhLS0tLQ0KZHQxIDwtIGRyb3BsZXZlbHMoZHQxW0tpbmdkb20gPT0gIkJhY3RlcmlhIiwgXSkNCg0KIyBDb3VudHMNCmNvdW50cyA8LSBkdDFbLCANCiAgICAgICAgICAgICAgODpuY29sKGR0MSksDQogICAgICAgICAgICAgIHdpdGggPSBGQUxTRV0NCg0KIyBTYW1wbGUgbGVnZW5kDQpzbGVnZW5kIDwtIHBzQHNhbV9kYXRhDQpgYGANCg0KIyMjIDEuIENsYXNzDQpgYGB7ciBDbGFzcywgd2FybmluZz1GQUxTRSxlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0UsZmlnLndpZHRoPTEwLGZpZy5oZWlnaHQ9N30NCiMgMS4gQWdncmVnYXRlIGNvdW50cyBieSBDbGFzcy0tLS0NCmR0LmMgPC0gbGFwcGx5KGNvdW50cywNCiAgICAgICAgICAgICAgIGZ1bmN0aW9uKGEpIHsNCiAgICAgICAgICAgICAgICAgb3V0IDwtIGFnZ3JlZ2F0ZSh4ID0gYSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA9IGxpc3QoQ2xhc3MgPSBkdDEkQ2xhc3MpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZVTiA9ICJzdW0iKQ0KICAgICAgICAgICAgICAgfSkNCg0KZHQuYyA8LSBSZWR1Y2UoZiA9IGZ1bmN0aW9uKC4uLil7bWVyZ2UoLi4uLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5ID0gIkNsYXNzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbCA9IFRSVUUpfSwNCiAgICAgICAgICAgICAgIHggPSBkdC5jKQ0KY29sbmFtZXMoZHQuYylbLTFdIDwtIGNvbG5hbWVzKGNvdW50cykNCg0KIyBSZWxhdGl2ZSBhYnVuZGFuY2UtLS0tDQpkdHIuYyA8LSBkYXRhLnRhYmxlKGFwcGx5KGR0LmNbLCAtMV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgIDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhL3N1bShhKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICB9KSkNCmR0ci5jJENsYXNzIDwtIGR0LmMkQ2xhc3MNCg0KZHRyLmMgPC0gbWVsdC5kYXRhLnRhYmxlKGRhdGEgPSBkdHIuYywNCiAgICAgICAgICAgICAgICAgICAgICAgICBpZC52YXJzID0gbmNvbChkdHIuYyksDQogICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZS52YXJzID0gMToobmNvbChkdHIuYykgLSAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5uYW1lID0gIlNhbXBsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUubmFtZSA9ICJSQSIpDQoNCiMgTWVyZ2UgY291bnRzIGFuZCBzYW1wbGUgaW5mby0tLS0NCmR0ci5jIDwtIG1lcmdlKHNhbXBsZXMsDQogICAgICAgICAgICAgICBkdHIuYywNCiAgICAgICAgICAgICAgIGJ5ID0gIlNhbXBsZSIpDQojZHRyLmMkV2VlayA8LSBmYWN0b3IoZHRyLmMkV2VlaykNCmR0ci5jJFNhbXBsZSA8LSBmYWN0b3IoZHRyLmMkU2FtcGxlLA0KICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSB1bmlxdWUoZHRyLmMkU2FtcGxlKSkNCg0KcDEgPC0gZ2dwbG90KGR0ci5jW29yZGVyKFJBLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGRlY3JlYXNpbmcgPSBUUlVFKSwgXSwNCiAgICAgICBhZXMoeCA9IFNhbXBsZSwNCiAgICAgICAgICAgeSA9IFJBLA0KICAgICAgICAgICBmaWxsID0gQ2xhc3MsDQogICAgICAgICAgIGdyb3VwID0gRGlldCkpICsNCiAgZmFjZXRfd3JhcCh+IFdlZWsgKyBEaWV0LA0KICAgICAgICAgICAgIHNjYWxlcyA9ICJmcmVlX3giLA0KICAgICAgICAgICAgIG5yb3cgPSAxKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsIDApKSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIiwNCiAgICAgICAgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwNCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGp1c3QgPSAxKSkNCmdncGxvdGx5KHAxKQ0KYGBgDQoNCiMjIyAyLiBPcmRlcg0KYGBge3IgT3JkZXIsIHdhcm5pbmc9RkFMU0UsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLGZpZy53aWR0aD0xMCxmaWcuaGVpZ2h0PTd9DQpkdC5vIDwtIGxhcHBseShjb3VudHMsDQogICAgICAgICAgICAgICBmdW5jdGlvbihhKSB7DQogICAgICAgICAgICAgICAgIG91dCA8LSBhZ2dyZWdhdGUoeCA9IGEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPSBsaXN0KENsYXNzID0gZHQxJENsYXNzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciA9IGR0MSRPcmRlciksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlVOID0gInN1bSIpDQogICAgICAgICAgICAgICB9KQ0KDQpkdC5vIDwtIFJlZHVjZShmID0gZnVuY3Rpb24oLi4uKXttZXJnZSguLi4sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPSBjKCJDbGFzcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9yZGVyIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGwgPSBUUlVFKX0sDQogICAgICAgICAgICAgICB4ID0gZHQubykNCmNvbG5hbWVzKGR0Lm8pWy1jKDE6MildIDwtIGNvbG5hbWVzKGNvdW50cykNCg0KIyBSZWxhdGl2ZSBhYnVuZGFuY2UtLS0tDQpkdHIubyA8LSBkYXRhLnRhYmxlKGFwcGx5KGR0Lm9bLCAtYygxOjIpXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oYSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEvc3VtKGEpDQogICAgICAgICAgICAgICAgICAgICAgICAgIH0pKQ0KZHRyLm8kQ2xhc3MgPC0gZHQubyRDbGFzcw0KZHRyLm8kT3JkZXIgPC0gZHQubyRPcmRlcg0KDQpkdHIubyA8LSBtZWx0LmRhdGEudGFibGUoZGF0YSA9IGR0ci5vLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGlkLnZhcnMgPSAobmNvbChkdHIubykgLSAxKTpuY29sKGR0ci5vKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlLnZhcnMgPSAxOihuY29sKGR0ci5vKSAtIDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLm5hbWUgPSAiU2FtcGxlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5uYW1lID0gIlJBIikNCg0KIyBNZXJnZSBjb3VudHMgYW5kIHNhbXBsZSBpbmZvLS0tLQ0KZHRyLm8gPC0gbWVyZ2Uoc2FtcGxlcywNCiAgICAgICAgICAgICAgIGR0ci5vLA0KICAgICAgICAgICAgICAgYnkgPSAiU2FtcGxlIikNCmR0ci5vJFNhbXBsZSA8LSBmYWN0b3IoZHRyLm8kU2FtcGxlLA0KICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSB1bmlxdWUoZHRyLm8kU2FtcGxlKSkNCg0KcDEgPC0gZ2dwbG90KGR0ci5vW29yZGVyKFJBLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGRlY3JlYXNpbmcgPSBUUlVFKSwgXSwNCiAgICAgICAgICAgICBhZXMoeCA9IFNhbXBsZSwNCiAgICAgICAgICAgICAgICAgeSA9IFJBLA0KICAgICAgICAgICAgICAgICBjb2xvciA9IENsYXNzLA0KICAgICAgICAgICAgICAgICBmaWxsID0gT3JkZXIsDQogICAgICAgICAgICAgICAgIGdyb3VwID0gRGlldCkpICsNCiAgZmFjZXRfd3JhcCh+IFdlZWsgKyBEaWV0LA0KICAgICAgICAgICAgIHNjYWxlcyA9ICJmcmVlX3giLA0KICAgICAgICAgICAgIG5yb3cgPSAxKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsIDApKSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLA0KICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoanVzdCA9IDEpKQ0KZ2dwbG90bHkocDEpDQpgYGANCg0KIyMjIDMuIEZhbWlseQ0KYGBge3IgRmFtaWx5LCB3YXJuaW5nPUZBTFNFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSxmaWcud2lkdGg9MTAsZmlnLmhlaWdodD03fQ0KIyAzLiBBZ2dyZWdhdGUgY291bnRzIGJ5IEZhbWlseS0tLS0NCmR0LmYgPC0gbGFwcGx5KGNvdW50cywNCiAgICAgICAgICAgICAgIGZ1bmN0aW9uKGEpIHsNCiAgICAgICAgICAgICAgICAgb3V0IDwtIGFnZ3JlZ2F0ZSh4ID0gYSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA9IGxpc3QoQ2xhc3MgPSBkdDEkQ2xhc3MsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbWlseSA9IGR0MSRGYW1pbHkpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZVTiA9ICJzdW0iKQ0KICAgICAgICAgICAgICAgfSkNCg0KZHQuZiA8LSBSZWR1Y2UoZiA9IGZ1bmN0aW9uKC4uLil7bWVyZ2UoLi4uLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5ID0gYygiQ2xhc3MiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYW1pbHkiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbCA9IFRSVUUpfSwNCiAgICAgICAgICAgICAgIHggPSBkdC5mKQ0KY29sbmFtZXMoZHQuZilbLWMoMToyKV0gPC0gY29sbmFtZXMoY291bnRzKQ0KDQojIFJlbGF0aXZlIGFidW5kYW5jZS0tLS0NCmR0ci5mIDwtIGRhdGEudGFibGUoYXBwbHkoZHQuZlssIC1jKDE6MildLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihhKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYS9zdW0oYSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpDQpkdHIuZiRDbGFzcyA8LSBkdC5mJENsYXNzDQpkdHIuZiRGYW1pbHkgPC0gZHQuZiRGYW1pbHkNCg0KZHRyLmYgPC0gbWVsdC5kYXRhLnRhYmxlKGRhdGEgPSBkdHIuZiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBpZC52YXJzID0gKG5jb2woZHRyLmYpIC0gMSk6bmNvbChkdHIuZiksDQogICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZS52YXJzID0gMToobmNvbChkdHIuZikgLSAyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5uYW1lID0gIlNhbXBsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUubmFtZSA9ICJSQSIpDQoNCiMgTWVyZ2UgY291bnRzIGFuZCBzYW1wbGUgaW5mby0tLS0NCmR0ci5mIDwtIG1lcmdlKHNhbXBsZXMsDQogICAgICAgICAgICAgICBkdHIuZiwNCiAgICAgICAgICAgICAgIGJ5ID0gIlNhbXBsZSIpDQpkdHIuZiRTYW1wbGUgPC0gZmFjdG9yKGR0ci5mJFNhbXBsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gdW5pcXVlKGR0ci5mJFNhbXBsZSkpDQoNCnAxIDwtIGdncGxvdChkdHIuZltvcmRlcihSQSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWNyZWFzaW5nID0gVFJVRSksIF0sDQogICAgICAgICAgICAgYWVzKHggPSBTYW1wbGUsDQogICAgICAgICAgICAgICAgIHkgPSBSQSwNCiAgICAgICAgICAgICAgICAgY29sb3IgPSBDbGFzcywNCiAgICAgICAgICAgICAgICAgZmlsbCA9IEZhbWlseSwNCiAgICAgICAgICAgICAgICAgZ3JvdXAgPSBEaWV0KSkgKw0KICBmYWNldF93cmFwKH4gV2VlayArIERpZXQsDQogICAgICAgICAgICAgc2NhbGVzID0gImZyZWVfeCIsDQogICAgICAgICAgICAgbnJvdyA9IDEpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwgMCkpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksDQogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhqdXN0ID0gMSkpDQpnZ3Bsb3RseShwMSkNCmBgYA0KDQojIyMgNC4gR2VudXMNCmBgYHtyIEdlbnVzLCB3YXJuaW5nPUZBTFNFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSxmaWcud2lkdGg9MTAsZmlnLmhlaWdodD03fQ0KZHQuZyA8LSBsYXBwbHkoY291bnRzLA0KICAgICAgICAgICAgICAgZnVuY3Rpb24oYSkgew0KICAgICAgICAgICAgICAgICBvdXQgPC0gYWdncmVnYXRlKHggPSBhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5ID0gbGlzdChDbGFzcyA9IGR0MSRDbGFzcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VudXMgPSBkdDEkR2VudXMpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZVTiA9ICJzdW0iKQ0KICAgICAgICAgICAgICAgfSkNCg0KZHQuZyA8LSBSZWR1Y2UoZiA9IGZ1bmN0aW9uKC4uLil7bWVyZ2UoLi4uLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5ID0gYygiQ2xhc3MiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHZW51cyIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsID0gVFJVRSl9LA0KICAgICAgICAgICAgICAgeCA9IGR0LmcpDQpjb2xuYW1lcyhkdC5nKVstYygxOjIpXSA8LSBjb2xuYW1lcyhjb3VudHMpDQoNCiMgUmVsYXRpdmUgYWJ1bmRhbmNlLS0tLQ0KZHRyLmcgPC0gZGF0YS50YWJsZShhcHBseShkdC5nWywgLWMoMToyKV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgIDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhL3N1bShhKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICB9KSkNCmR0ci5nJENsYXNzIDwtIGR0LmckQ2xhc3MNCmR0ci5nJEdlbnVzIDwtIGR0LmckR2VudXMNCg0KZHRyLmcgPC0gbWVsdC5kYXRhLnRhYmxlKGRhdGEgPSBkdHIuZywNCiAgICAgICAgICAgICAgICAgICAgICAgICBpZC52YXJzID0gKG5jb2woZHRyLmcpIC0gMSk6bmNvbChkdHIuZyksDQogICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZS52YXJzID0gMToobmNvbChkdHIuZykgLSAyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5uYW1lID0gIlNhbXBsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUubmFtZSA9ICJSQSIpDQoNCiMgTWVyZ2UgY291bnRzIGFuZCBzYW1wbGUgaW5mby0tLS0NCmR0ci5nIDwtIG1lcmdlKHNhbXBsZXMsDQogICAgICAgICAgICAgICBkdHIuZywNCiAgICAgICAgICAgICAgIGJ5ID0gIlNhbXBsZSIpDQpkdHIuZyRTYW1wbGUgPC0gZmFjdG9yKGR0ci5nJFNhbXBsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gdW5pcXVlKGR0ci5nJFNhbXBsZSkpDQoNCnAxIDwtIGdncGxvdChkdHIuZ1tvcmRlcihSQSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWNyZWFzaW5nID0gVFJVRSksIF0sDQogICAgICAgICAgICAgYWVzKHggPSBTYW1wbGUsDQogICAgICAgICAgICAgICAgIHkgPSBSQSwNCiAgICAgICAgICAgICAgICAgY29sb3IgPSBDbGFzcywNCiAgICAgICAgICAgICAgICAgZmlsbCA9IEdlbnVzLA0KICAgICAgICAgICAgICAgICBncm91cCA9IERpZXQpKSArDQogIGZhY2V0X3dyYXAofiBXZWVrICsgRGlldCwNCiAgICAgICAgICAgICBzY2FsZXMgPSAiZnJlZV94IiwNCiAgICAgICAgICAgICBucm93ID0gMSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLCAwKSkgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwNCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGp1c3QgPSAxKSkNCmdncGxvdGx5KHAxKQ0KYGBg